package com.lanan.springboot.service;

import com.lanan.springboot.model.Tag;
import com.lanan.springboot.util.MyPage;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;

/**
 * @desc ITagService
 * @author lanan
 * @date 2022-04-16 21:43:23
 **/
public interface ITagService {
    void selectTagsByTopicId(MyPage<Map<String, Object>> page);

    Tag selectById(Integer id);

    Tag selectByName(String name);

    List<Tag> selectByIds(List<Integer> ids);

    /**
     * @desc 根据话题查询关联的所有标签
     * @author lanan
     * @date 2022-04-16 21:44:05
     * @param topicId
     * @return java.util.List<com.lanan.springboot.model.Tag>
     **/
    List<Tag> selectByTopicId(Integer topicId);

    /**
     * @desc 将创建话题时填的tag处理并保存
     * @author lanan
     * @date 2022-04-16 21:44:12
     * @param newTags
     * @return java.util.List<com.lanan.springboot.model.Tag>
     **/
    List<Tag> insertTag(String newTags);

    /**
     * @desc 将标签的话题数都-1
     * @author lanan
     * @date 2022-04-16 21:44:22
     * @param id
     * @return void
     **/
    void reduceTopicCount(Integer id);

    /**
     * @desc 查询标签关联的话题
     * @author lanan
     * @date 2022-04-16 21:44:30
     * @param tagId
     * @param pageNo
     * @return com.lanan.springboot.util.MyPage<java.util.Map<java.lang.String,java.lang.Object>>
     **/
    MyPage<Map<String, Object>> selectTopicByTagId(Integer tagId, Integer pageNo);

    /**
     * @desc 查询标签列表
     * @author lanan
     * @date 2022-04-16 21:44:37
     * @param pageNo
     * @param pageSize
     * @param name
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.lanan.springboot.model.Tag>
     **/
    IPage<Tag> selectAll(Integer pageNo, Integer pageSize, String name);

    void update(Tag tag);

    /**
     * @desc 如果 topic_tag 表里还有关联的数据，这里删除会报错
     * @author lanan
     * @date 2022-04-16 21:44:43
     * @param id
     **/
    void delete(Integer id);

    /**
     * @desc 同步标签的话题数
     * @author lanan
     * @date 2022-04-16 21:44:52
     * @param
     **/
    void async();

    /**
     * @desc 查询今天新增的标签数
     * @author lanan
     * @date 2022-04-16 21:44:59
     * @return int
     **/
    int countToday();
}
